﻿// 101 排序4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <memory.h>
using  namespace std;


/*
http://oj.daimayuan.top/course/22/problem/652


给定 n个正整数 a1,a2,…,an，请将它们从小到大排序，然后输出。

输入格式
第一行一个整数 n，表示数字个数。

接下来一行包含 n个整数 a1,a2,...,an。

输出格式
一行 n个整数，表示排完序之后的结果。

样例输入
5
3 9 5 3 2
样例输出
2 3 3 5 9
数据规模
对于 100%的数据，保证 1≤n≤105,1≤ai≤109。
*/

const int N = 1e5 + 10;
int n, m=10, a[N + 1], sa[N + 1], v[N + 1], r[N + 1], c[10];

void countingsort() {
	memset(c, 0, sizeof c);
	for (int i = 1; i <= n; i++)
		++c[v[i]];
	for (int i = 1; i <= 9; i++)
		c[i] += c[i - 1];
	for (int i = n; i; i--)
		r[sa[i]] = c[v[sa[i]]]--;
	for (int i = 1; i <= n; i++) {
		sa[r[i]] = i;
	}
}

void radixsort() {
	for (int i = 1; i <= n; i++)
		sa[i] = i;
	int x = 1;
	for (int i = 1; i <= m; i++, x *= 10) {
		for (int j = 1; j <= n; j++) {
			v[j] = a[j] / x % 10;
		}
		countingsort();
	}

	for (int i = 1; i <= n; i++) {
		printf("%d ",a[sa[i]]);
	}
}


int main()
{
	scanf("%d",&n);
	for (int i = 1; i <= n; i++)
		scanf("%d",&a[i]);
	radixsort();

	return 0;
}

 